C++单、双精度浮点数16进制转10进制原理及代码

您所在的位置:网站首页 ieee 转换 C++单、双精度浮点数16进制转10进制原理及代码

C++单、双精度浮点数16进制转10进制原理及代码

2023-08-07 12:27| 来源: 网络整理| 查看: 265

一、浮点数16进制转10进制原理

浮点数有两种:单精度float(4字节) 和 双精度double(8字节)。

1、单精度结构表

符号位 Sign (S)指数部分 Exponent (E)尾数部分 Mantissa (M)3130 ~ 2322 ~ 01bit8bit

23bit

2、双精度结构表

符号位 Sign (S)指数部分 Exponent (E)尾数部分 Mantissa (M)6362 ~ 5251 ~ 01bit11bit

52bit

3、浮点数 16进制转10进制原理

公式: \LARGE V = (-1)^{s}*M*2^{E}

(1)、 (-1)^S表示符号位,当S=0,V为正,S=1,V为负。

(2)、 M表示有效数字,大于等于1,小于2。.

        单精度 M = 尾数部分十进制 * 2^(-23) + 1;

        双精度 M = 尾数部分十进制 * 2^(-52) + 1。

(3)、 E表示指数数部分。

        单精度 E = 指数部分十进制 - 127;

        双精度 E = 指数部分十进制 - 1023;

(4)、单精度浮点数16进制转10进制,例(42A54FCC):

十六进制

42 A5 4F CC

二进制01000010 10100101 01001111 11001100 符号位(S)0指数部分10000101(十进制:133)尾数部分0100101 01001111 11001100(十进制:2445260)M 计算M = 2^(-23) * 2445260 + 1 = 1.2914977073669433592^E 计算2^E = 2^(133 - 127) = 2^6 = 64十进制计算 VV = (-1)^S * M * 2^E = 1 * 1.291497707366943359 * 64十进制结果 V82.65585327148437498

        ·双精度浮点数计算方式同理。

二、代码

代码在Qt上编译的,没有Qt可以将QByteArray替换为unsigned  char*类型。

#include #include /*单精度浮点数(32位) 16进制转10进制*/ double hex32_10(QByteArray byteDate) { char* pData = byteDate.data(); //符号位 1 int sign = int(pData[0] >> 7); //指数位 8 int e = int(((pData[0] & 0x7F) > 7) & 0x01)) - 127; //小数位 23 int im = pData[3] & 0xFF; im |= (pData[2]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3